import { reqLogin, getUserInfo, reqGetUserInfoById } from '@/api/user'
import { resetRouter } from '@/router'
import { setToken, getToken, removeToken } from '@/utils/auth'
export default {
  namespaced: true,
  state() {
    return {
      token: getToken() || '', // 取token
      userInfo: {} // 用户信息
    }
  },
  mutations: {
    saveToken(state, newToken) {
      state.token = newToken // 存token,将actions中传递的token赋值给state中的token
      // 持久化存储token
      setToken(newToken)
    },
    setUserInfo(state, newUserInfo) {
      state.userInfo = newUserInfo // 存用户信息
    },
    // 退出方法 清除token 清除用户信息
    remove_token(state) {
      state.token = null // 清除token
      removeToken() // 清除vue中的token
    },
    remove_userinfo(state) {
      state.userInfo = {} // 清除用户信息
    },
    // 保存头像
    set_StaffPhoto(state, url) {
      // state.userInfo.staffPhoto = url
      state.userInfo = {
        ...state.userInfo,
        staffPhoto: url
      }
    }
  },
  actions: {
    // async修饰的方法会返回promise
    async login(context, data) {
      const res = await reqLogin(data) // data为调用该方法是传递过来的form
      const token = res.data
      // console.log('token', token)
      context.commit('saveToken', token) // 调用saveToken将token传递过去
    },
    async getUserInfo({ commit }) {
      const { data: data1 } = await getUserInfo()
      // console.log('用户基本资料', data)
      commit('setUserInfo', data1) // 调用setUserInfo方法，将用户信息传递到mutations

      const { data: data2 } = await reqGetUserInfoById(data1.userId)
      // console.log('用户详情', data2)

      // const obj = { ...data1, ...data2 }
      const obj = Object.assign(data1, data2)
      console.log('个人信息汇总', obj)

      return obj // return出去给导航守卫使用
    },
    // 退出 调用mutations中的 清除token以及清除用户信息的方法
    async LOGOUT({ commit }) {
      commit('remove_token')
      commit('remove_userinfo')
      // 重置路由
      resetRouter()
      // 清空vuex的permission模块routes
      // root:true开启找全局-不要找我自已
      commit('permission/setRoutes', [], { root: true })
    },
    // 头像
    setUserStaffPhoto({ commit, state }, { url, urlUserId }) {
      console.log('1', url, urlUserId)
      if (state.userInfo.id === urlUserId) {
        commit('set_StaffPhoto', url)
      }
    }
  }
}
